# custom_mcp.py
# 安装mcp驱动 pip install mcp==1.6.0
# 安装数据库驱动 pip install mysql-connector-python

# 创建虚拟环境 python -m venv venv
# Windows 下激活：venv\Scripts\activate
# macOS/Linux 下激活：source venv/bin/activate

# 根据需要安装uv 和 bun

from mcp.server.fastmcp import FastMCP
import os
import platform
import requests
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

mcp = FastMCP()

@mcp.tool()
def list_desktop_files() -> list:
    """获取当前用户桌面上的所有文件列表（适用于Windows系统）"""
    if platform.system().lower() == 'windows':
        desktop_path = os.path.join(os.environ["USERPROFILE"], "Desktop")
    else:
        desktop_path = os.path.expanduser("~/Desktop")
    return os.listdir(desktop_path)

@mcp.tool()
def say_hello(name: str) -> str:
    """生成个性化问候语（中英双语版）"""
    return f"🎉 你好 {name}! (Hello {name}!)"

@mcp.resource("config://app_settings")
def get_app_config() -> dict:
    return {"theme": "dark", "language": "zh-CN"}

@mcp.prompt()
def code_review_prompt(code: str) -> str:
    return f"请审查以下代码并指出问题：\n\n{code}"

@mcp.tool()
def query_database(sql: str) -> str:
    """
    连接本地 MySQL 数据库，执行查询并返回结果。
    
    注意：
      1. 本功能仅用于执行查询操作（SELECT），请勿用于执行更新或删除等敏感操作；
      2. 请确保数据库服务已启动，并根据实际环境修改数据库连接信息（用户名、密码、数据库名）。
    """
    import mysql.connector
    try:
        # 根据实际环境配置数据库连接信息
        connection = mysql.connector.connect(
            host="localhost",
            user="root",             # 替换为您的MySQL用户名
            password="root",         # 替换为您的MySQL密码
            database="student_management"    # 替换为您的数据库名
        )
        cursor = connection.cursor()
        cursor.execute(sql)
        results = cursor.fetchall()
        
        # 获取字段名称
        columns = [desc[0] for desc in cursor.description]
        
        # 构造结果字符串，字段之间用 "|" 分隔
        output = " | ".join(columns) + "\n"
        for row in results:
            output += " | ".join(str(item) for item in row) + "\n"
        
        cursor.close()
        connection.close()
        
        if not results:
            return "查询无结果"
        return output
    except Exception as e:
        return f"查询过程中出错: {e}"

@mcp.tool()
def get_juejin_hot() -> list:
    """
    获取掘金网站热门文章信息，返回前10篇文章的相关数据。
    包含文章排名、标题、作者、互动数据（热度、浏览、点赞、收藏、评论）以及文章链接。
    """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'https://juejin.cn/'
    }
    url = "https://api.juejin.cn/content_api/v1/content/article_rank?category_id=1&type=hot"
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        data = response.json()
        
        articles = data.get('data', [])[:10]
        if not articles:
            return [{"提示": "API返回数据格式异常，请检查接口有效性"}]
        
        result = []
        for index, article in enumerate(articles, 1):
            content_data = article.get('content', {})
            counter_data = article.get('content_counter', {})
            author_info = article.get('author', {})
            
            article_info = {
                '排名': index,
                '标题': content_data.get('title', '无标题'),
                '作者': author_info.get('name', '匿名用户'),
                '互动数据': {
                    '热度': counter_data.get('hot_rank', 0),
                    '浏览': counter_data.get('view', 0),
                    '点赞': counter_data.get('like', 0),
                    '收藏': counter_data.get('collect', 0),
                    '评论': counter_data.get('comment_count', 0)
                },
                '链接': f"https://juejin.cn/post/{content_data.get('content_id', '')}"
            }
            result.append(article_info)
        return result
    except Exception as e:
        return [{"错误": f"数据获取失败，错误类型：{type(e).__name__}，详细信息：{str(e)}"}]

@mcp.tool()
def send_email(recipient: str, subject: str, content: str) -> str:
    """
    发送邮件的工具。
    
    参数说明：
      recipient: 收件人的邮箱地址；
      subject: 邮件主题；
      content: 邮件内容，支持HTML格式。
    
    请先根据您所使用的SMTP服务配置下列参数：
      - smtp_server: SMTP服务器地址
      - smtp_port: SMTP服务器端口（常见端口587用于STARTTLS加密）
      - sender_email: 发件人邮箱地址
      - sender_password: 发件人邮箱密码或授权码（注：为了安全建议不要在代码中明文写入）
    """
    # QQ邮箱的 SMTP 配置
    smtp_server = "smtp.qq.com"
    smtp_port = 587
    sender_email = "xxxx@qq.com"        # 替换为您的 QQ 邮箱
    sender_password = "xxxx"  # 替换为您在QQ邮箱中生成的授权码

    try:
        # 构造MIME邮件对象
        msg = MIMEMultipart()
        msg["From"] = sender_email
        msg["To"] = recipient
        msg["Subject"] = subject
        
        # 将邮件内容以HTML形式添加进去
        msg.attach(MIMEText(content, "html"))
        
        # 连接SMTP服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 开启TLS加密传输
        server.login(sender_email, sender_password)
        server.send_message(msg)
        server.quit()
        return "邮件发送成功"
    except Exception as e:
        return f"邮件发送失败，错误信息: {e}"

if __name__ == "__main__":
    mcp.run(transport='stdio')